package com.csii.activiti.server.core.service;

import com.csii.activiti.server.core.entity.*;

import java.util.List;


public interface FlowOperationService {
    /**
     * 保存并发布流程
     * @param flow
     * @return
     */
    void saveAndPublishFlow(ActFlowConfiguration flow);

    /**
     * 保存流程
     * @param flow
     * @return
     */
    ActFlowConfiguration saveFlow(ActFlowConfiguration flow);

    /**
     * 发布流程
     * @param flowId
     * @return
     */
    void publishFlow(String flowId);

    /**
     * 启动流程
     * @param actStartFlowInstance
     * @return
     */
    String startFlowInstanceByKey(ActStartFlowInstance actStartFlowInstance);
    /**
     * 完成任务节点
     * @param actCompleteTask
     * @return
     */
    void completeTask(ActCompleteTask actCompleteTask);

    /**
     * 驳回
     * @param actBackTask
     * @return
     */
    void backTask(ActBackTask actBackTask);


    /**
     * 委托他人代办
     * @param actDelegateTask
     * @return
     */
    void delegateTask(ActDelegateTask actDelegateTask);


    /**
     * 流程添加权限
     * @param actFlowPermission
     * @return
     */
    void addFlowPermission(ActFlowPermission actFlowPermission);


    /**
     * 流程排序
     * @param ids
     * @return
     */
    void batchUpdateFlowSort(List<String> ids);

    /**
     * 完成消息节点
     * @param actMessageTask
     * @return
     */
    void completeMessageTask(ActMessageTask actMessageTask);

    /**
     * 驳回消息节点
     * @param actMessageTask
     * @return
     */
    void backMessageTask(ActMessageTask actMessageTask);

    /**
     * 移动到
     * @param actFlowMoveToGroup
     * @return
     */
    void moveToGroup(ActFlowMoveToGroup actFlowMoveToGroup);

    /**
     * 删除流程
     * @param flowId
     * @return
     */
    void deleteFlow(String flowId);

    /**
     * 流程停用,启用
     * @param flowId
     * @return
     */
    void updatePublishStatus(String flowId,String groupId);

    /**
     * 重新申请
     * @param flowInstanceId
     * @return
     */
    void reapply(String flowInstanceId);

    /**
     * 撤回流程
     * @param actFlowWithdrawn
     * @return
     */
    void withdrawalProcess(ActFlowWithdrawn actFlowWithdrawn);

    /**
     * 手动流程催办
     * @param instanceId
     * @return
     */
    void urgingProcessByInstanceId(String instanceId);

    /**
     * 根据简单的密钥生成复杂密钥
     * @param simpleKey
     * @return
     */
    String generateComplexKey(String simpleKey);

    /**
     * 完成任务节点通过实列ID
     * @param actProcessTaskByInstanceId
     * @return
     */
    void completeTaskByInstanceId(ActProcessTaskByInstanceId actProcessTaskByInstanceId);

    /**
     * 驳回任务节点通过实列ID
     * @param actProcessTaskByInstanceId
     * @return
     */
    void backTaskByInstanceId(ActProcessTaskByInstanceId actProcessTaskByInstanceId);
}
